Mountpoint for Amazon S3 を利用して、WordPress のメディアファイルをオフロードしてみた
こんにちは、森田です。
みなさん、Mountpoint for Amazon S3 を使っていますか?
Mountpoint for Amazon S3 は非常に便利なツールで、AWS製のS3マウントツールとなっており、現在一般利用も可能となっております。
本記事では、実際にWordPressのメディアファイルをオフロードする用途として使ってみたいと思います。
Mountpoint for Amazon S3 のおさらい
操作
Mountpoint for Amazon S3では、以下の操作が可能です。
- ファイルの作成
- ファイルの削除
- マウント時に--allow-deleteオプションの指定が必須
- ファイルの上書き
- --allow-deleteオプションを使用すると、最初にオブジェクトを削除してから再作成可能
- マウント先の指定
- --prefixを使用すると S3 バケット内のフォルダにマッピングすることが可能
権限
マウント時の権限については以下のようになっています。
- 特に何も指定せず、マウントすると、ディレクトリ内のファイル読み込み権限は実行したユーザ
- --uidや--gidオプションなどを指定することで任意の設定可能
WordPress で Mountpoint for Amazon S3 の導入
前提
EC2インスタンスは起動済みとします。
本記事では、Amazon Linux 2023 を利用します。
また、S3アクセスができるようにEC2インスタンスにIAMロールも付与済みとします。
S3バケットの作成
パブリックアクセスが可能となるようにS3バケットの作成を行います。
まずは、作成時にブロックパブリックアクセスをオフにして作成を行います。
作成後は、以下のバケットポリシーを設定し、s3:GetObjectを許可します。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "PublicRead", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::バケット名/*" } ] }
WordPress インストール
EC2インスタンスに接続を行い、WordPress のインストールを行います。
sudo dnf install wget php-mysqlnd httpd php-fpm php-mysqli mariadb105-server php-json php php-devel -y wget https://wordpress.org/latest.tar.gz tar -xzf latest.tar.gz cat wordpress/wp-includes/version.php
$wp_version = '6.4.2';
mountpoint-s3 のインストール
以下のコマンドを実行してインストールを行います。
wget https://s3.amazonaws.com/mountpoint-s3-release/latest/x86_64/mount-s3.rpm sudo dnf install -y ./mount-s3.rpm
WordPress 用のデータベース設定
以下のコマンドを実行して、WordPress用のデータベース設定を行います。
sudo systemctl start mariadb httpd sudo mysql -u root -p MariaDB [(none)]> CREATE USER 'wordpress-user'@'localhost' IDENTIFIED BY 'your_strong_password'; Query OK, 0 rows affected (0.005 sec) MariaDB [(none)]> CREATE DATABASE `wordpress-db`; Query OK, 1 row affected (0.000 sec) MariaDB [(none)]> GRANT ALL PRIVILEGES ON `wordpress-db`.* TO "wordpress-user"@"localhost"; Query OK, 0 rows affected (0.001 sec) MariaDB [(none)]> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.001 sec) MariaDB [(none)]> exit Bye
WordPress 設定
wp-config.phpへデータベースの情報を記載します。
cp wordpress/wp-config-sample.php wordpress/wp-config.php vi wordpress/wp-config.php
wordpress/wp-config.phpのDB_NAME
などを記載していきます。
// ** Database settings - You can get this info from your web host ** // /** The name of the database for WordPress */ define( 'DB_NAME', 'wordpress-db' ); /** Database username */ define( 'DB_USER', 'wordpress-user' ); /** Database password */ define( 'DB_PASSWORD', 'your_strong_password' );
記載後、wordpressのディレクトリをhtml配下にコピーします。
sudo cp -r wordpress/* /var/www/html/
apache ユーザの権限設定
以下のコマンドを実行して、/var/wwwのコンテンツ所有者を apache ユーザに変更します。
sudo chown -R apache /var/www
メディアファイルアップロード先のフォルダを作成
/var/www/htmlにメディアファイルアップロード先のimagesディレクトリを作成します。
cd /var/www/html sudo mkdir images sudo chown -R apache:apache images
imagesディレクトリにS3バケットをマウントします。
マウント時には、apacheユーザに権限を持たせるため、apacheユーザでマウントを行います。
sudo su -s /bin/bash apache # apacheユーザに切り替え mount-s3 バケット名 ./images --allow-delete --prefix images/
prefix images/ of bucket バケット名 is mounted at ./images
パブリックIPアドレスにアクセス
http://パブリックIP にアクセスすると以下のように言語の設定が表示されます。
日本語を選択して、WordPressの設定を完了させます。
options.phpで設定値変更
http://パブリックIP/wp-admin/options.php にアクセスするとアップロードパスの設定が可能です。
今回は、imagesにファイルをアップロードするため、upload_pathにimagesを設定します。
また、upload_url_pathは、 https://バケット名.s3.ap-northeast-1.amazonaws.com/images を指定します。
メディアのアップロード
では、設定が完了しましたので、実際にメディアライブラリにコンテンツをアップロードします。
アップロード後は、ファイルの表示もできており、S3のURLとなっていることが確認できます。
実際に、S3バケットの中身を確認すると、アップロードしたファイルが確認できます。
メディアの削除
アップロードしたファイルを削除を行います。
S3バケットからもファイルが削除されていることが確認できます。
さいごに
Mountpoint for Amazon S3 を使ってみましたが、非常に簡単に使うことができました。
今回は、あまり細かくマウントの設定を行いませんでしたが、マウント時のオプションが豊富にあり、利用シーンに合わせて設定すると良さそうです。
特にオプションのキャッシュ構成は、気になりますので、また別の機会に触ってみます。